/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */

package gameserver.configs;

import gameserver.model.account.Account;
import gameserver.model.gameobjects.player.Player;
import gameserver.model.gameobjects.player.PlayerCommonData;

import commons.configuration.Property;

public class GeneralConfig
{
	/**
	* Server Mode
	*/
	@Property(key = "gameserver.mode", defaultValue = "1")
	public static int	SERVER_MODE;
	
	@Property(key = "gameserver.motd.revision.display", defaultValue = "false")
	public static boolean	SERVER_MOTD_DISPLAYREV;
	
	/**
	* Member Level
	*/
	@Property(key = "gameserver.memberlevel", defaultValue = "0")
	public static int	MEMBER_LEVEL;
	
	/**
	* Disable chat server connection
	*/
	@Property(key = "gameserver.disable.chatserver", defaultValue = "true")
	public static boolean	DISABLE_CHAT_SERVER;
	
	@Property(key = "gameserver.log.chat", defaultValue = "false")
	public static boolean	LOG_CHAT;
	
	@Property(key = "gameserver.log.item", defaultValue = "false")
	public static boolean	LOG_ITEM;
	
	@Property(key = "gameserver.factions.ratio.limited", defaultValue = "false")
	public static boolean	FACTIONS_RATIO_LIMITED;
	
	@Property(key = "gameserver.factions.ratio.value", defaultValue = "50")
	public static int	FACTIONS_RATIO_VALUE;
	
	@Property(key = "gameserver.factions.ratio.level", defaultValue = "10")
	public static int	FACTIONS_RATIO_LEVEL;
	
	@Property(key = "gameserver.factions.ratio.minimum", defaultValue = "50")
	public static int	FACTIONS_RATIO_MINIMUM;
	
	@Property(key = "gameserver.lang", defaultValue = "en")
	public static String	LANG;

	@Property(key = "gameserver.disable.rdcserver", defaultValue = "false")
	public static boolean	DISABLE_RDC_SERVER;

	@Property(key = "gameserver.enable.freefly", defaultValue = "true")
	public static boolean	FREEFLY;

	@Property(key = "gameserver.enable.repurchase", defaultValue = "true")
	public static boolean	ENABLE_REPURCHASE;

	@Property(key = "gameserver.enable.purchaselimit", defaultValue = "true")
	public static boolean	ENABLE_PURCHASE_LIMIT;

	@Property(key = "gameserver.purchaselimit.restock.time", defaultValue = "4")
	public static int	PURCHASE_LIMIT_RESTOCK_TIME;

	@Property(key = "gameserver.passkey.enable", defaultValue = "false")
	public static boolean	PASSKEY_ENABLE;

	@Property(key = "gameserver.passkey.wrong.maxcount", defaultValue = "5")
	public static int	PASSKEY_WRONG_MAXCOUNT;
	
	/**
	* Crafting Configs
	*/
	@Property(key = "gameserver.crafting.speedupchance", defaultValue = "15")
	public static int	CRAFTING_SPEEDUP;

	@Property(key = "gameserver.regular.crafting.success", defaultValue = "33")
	public static int	REGULAR_CRAFTING_SUCCESS;

	@Property(key = "gameserver.critical.crafting.success", defaultValue = "30")
	public static int	CRITICAL_CRAFTING_SUCCESS;

	@Property(key = "gameserver.workorder.bonus", defaultValue = "false")
	public static boolean	WORK_ORDER_BONUS;

	@Property(key = "gameserver.mastercraft.limit.disable", defaultValue = "false")
	public static boolean	MASTERCRAFT_LIMIT_DISABLE;
	
	/**
	* Says whether cache for such things like PlayerCommonData or Appereance etc is cached in {@link WeakCacheMap} or
	* in {@link SoftCacheMap}
	*/
	@Property(key = "gameserver.cache.softcache", defaultValue = "false")
	public static boolean	SOFT_CACHE_MAP	= false;

	/**
	* If true then whole {@link Player} objects are cached as long as there is memory for them
	*/
	@Property(key = "gameserver.cache.players", defaultValue = "false")
	public static boolean	CACHE_PLAYERS	= false;

	/**
	* If true then whole {@link PlayerCommonData} objects are cached as long as there is memory for them
	*/
	@Property(key = "gameserver.cache.pcd", defaultValue = "false")
	public static boolean	CACHE_COMMONDATA	= false;

	/**
	* If true then whole {@link Account} objects are cached as long as there is memory for them
	*/
	@Property(key = "gameserver.cache.accounts", defaultValue = "false")
	public static boolean	CACHE_ACCOUNTS	= false;
	
	/**
	* Fly damage activator
	*/
	@Property(key = "gameserver.fall.damage.active", defaultValue = "true")
	public static boolean	ACTIVE_FALL_DAMAGE;

	/**
	* Percentage of damage per meter.
	*/
	@Property(key = "gameserver.fall.damage.percentage", defaultValue = "1.0")
	public static float	FALL_DAMAGE_PERCENTAGE;

	/**
	* Minimum fall damage range
	*/
	@Property(key = "gameserver.fall.damage.distance.minimum", defaultValue = "10")
	public static int	MINIMUM_DISTANCE_DAMAGE;

	/**
	* Maximum fall distance after which you will die after hitting the ground.
	*/
	@Property(key = "gameserver.fall.damage.distance.maximum", defaultValue = "50")
	public static int	MAXIMUM_DISTANCE_DAMAGE;

	/**
	* Maximum fall distance after which you will die in mid air.
	*/
	@Property(key = "gameserver.fall.damage.distance.midair", defaultValue = "200")
	public static int	MAXIMUM_DISTANCE_MIDAIR;
	
	/**
	* Controls the "Prices:" value in influence tab.
	*/
	@Property(key = "gameserver.prices.default.prices", defaultValue = "100")
	public static int	DEFAULT_PRICES;
	
	/**
	* Hidden modifier for all prices.
	*/
	@Property(key = "gameserver.prices.default.modifier", defaultValue = "100")
	public static int	DEFAULT_MODIFIER;
	
	/**
	* Taxes: value = 100 + tax % 
	*/
	@Property(key = "gameserver.prices.default.taxes", defaultValue = "100")
	public static int	DEFAULT_TAXES;
	
	@Property(key = "gameserver.prices.vendor.buymod", defaultValue = "100")
	public static int	VENDOR_BUY_MODIFIER;
	
	@Property(key = "gameserver.prices.vendor.sellmod", defaultValue = "20")
	public static int	VENDOR_SELL_MODIFIER;
	
	@Property(key = "html.root", defaultValue = "./data/static_data/HTML/")
	public static String	HTML_ROOT;
	
	@Property(key = "html.cache.file", defaultValue = "./html.cache")
	public static String	HTML_CACHE_FILE;
	
	@Property(key = "html.encoding", defaultValue = "UTF-8")
	public static String	HTML_ENCODING;
	
	/**
	* Enable the HTML Welcome Message Window on Player Login
	*/
	@Property(key = "enable.html.welcome", defaultValue = "false")
	public static boolean	ENABLE_HTML_WELCOME;
	
	/**
	* Time when daily quest is stating
	*/
	@Property(key = "gameserver.dailyquest.time", defaultValue = "9:00:00")
	public static String	DAILY_START_TIME;
	
	/**
	* Enable or Disable launching effects on critical
	*/
	@Property(key = "gameserver.criticaleffect", defaultValue = "false")
	public static boolean	CRITICAL_EFFECTS;
	
	/**
	* Enable or Disable adding of adv. stigma slots on level up
	*/
	@Property(key = "gameserver.advstigmaslot.onlvlup", defaultValue = "false")
	public static boolean	ADVSTIGMA_ONLVLUP;

	/**
	* Enable or Disable count down of duration of Abyss xform after logout
	*/
	@Property(key = "gameserver.abyssxform.afterlogout", defaultValue = "false")
	public static boolean	ABYSS_XFORM_DURATION_AFTER_LOGOUT;
}
